home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / linux / usb / gadgetfs.h < prev    next >
C/C++ Source or Header  |  2009-10-16  |  3KB  |  89 lines

  1. /*
  2.  * Filesystem based user-mode API to USB Gadget controller hardware
  3.  *
  4.  * Other than ep0 operations, most things are done by read() and write()
  5.  * on endpoint files found in one directory.  They are configured by
  6.  * writing descriptors, and then may be used for normal stream style
  7.  * i/o requests.  When ep0 is configured, the device can enumerate;
  8.  * when it's closed, the device disconnects from usb.  Operations on
  9.  * ep0 require ioctl() operations.
  10.  *
  11.  * Configuration and device descriptors get written to /dev/gadget/$CHIP,
  12.  * which may then be used to read usb_gadgetfs_event structs.  The driver
  13.  * may activate endpoints as it handles SET_CONFIGURATION setup events,
  14.  * or earlier; writing endpoint descriptors to /dev/gadget/$ENDPOINT
  15.  * then performing data transfers by reading or writing.
  16.  */
  17.  
  18. #ifndef __LINUX_USB_GADGETFS_H
  19. #define __LINUX_USB_GADGETFS_H
  20.  
  21. #include <linux/types.h>
  22. #include <asm/ioctl.h>
  23.  
  24. #include <linux/usb/ch9.h>
  25.  
  26. /*
  27.  * Events are delivered on the ep0 file descriptor, when the user mode driver
  28.  * reads from this file descriptor after writing the descriptors.  Don't
  29.  * stop polling this descriptor.
  30.  */
  31.  
  32. enum usb_gadgetfs_event_type {
  33.     GADGETFS_NOP = 0,
  34.  
  35.     GADGETFS_CONNECT,
  36.     GADGETFS_DISCONNECT,
  37.     GADGETFS_SETUP,
  38.     GADGETFS_SUSPEND,
  39.     /* and likely more ! */
  40. };
  41.  
  42. /* NOTE:  this structure must stay the same size and layout on
  43.  * both 32-bit and 64-bit kernels.
  44.  */
  45. struct usb_gadgetfs_event {
  46.     union {
  47.         /* NOP, DISCONNECT, SUSPEND: nothing
  48.          * ... some hardware can't report disconnection
  49.          */
  50.  
  51.         /* CONNECT: just the speed */
  52.         enum usb_device_speed    speed;
  53.  
  54.         /* SETUP: packet; DATA phase i/o precedes next event
  55.          *(setup.bmRequestType & USB_DIR_IN) flags direction
  56.          * ... includes SET_CONFIGURATION, SET_INTERFACE
  57.          */
  58.         struct usb_ctrlrequest    setup;
  59.     } u;
  60.     enum usb_gadgetfs_event_type    type;
  61. };
  62.  
  63.  
  64. /* The 'g' code is also used by printer gadget ioctl requests.
  65.  * Don't add any colliding codes to either driver, and keep
  66.  * them in unique ranges (size 0x20 for now).
  67.  */
  68.  
  69. /* endpoint ioctls */
  70.  
  71. /* IN transfers may be reported to the gadget driver as complete
  72.  *    when the fifo is loaded, before the host reads the data;
  73.  * OUT transfers may be reported to the host's "client" driver as
  74.  *    complete when they're sitting in the FIFO unread.
  75.  * THIS returns how many bytes are "unclaimed" in the endpoint fifo
  76.  * (needed for precise fault handling, when the hardware allows it)
  77.  */
  78. #define    GADGETFS_FIFO_STATUS    _IO('g', 1)
  79.  
  80. /* discards any unclaimed data in the fifo. */
  81. #define    GADGETFS_FIFO_FLUSH    _IO('g', 2)
  82.  
  83. /* resets endpoint halt+toggle; used to implement set_interface.
  84.  * some hardware (like pxa2xx) can't support this.
  85.  */
  86. #define    GADGETFS_CLEAR_HALT    _IO('g', 3)
  87.  
  88. #endif /* __LINUX_USB_GADGETFS_H */
  89.